package com.fyl.leetcode.doublePointer;

/**
 * @author:fyl
 * @date 2021/4/25 8:56
 * @Modified By:
 * @Modified Date:
 * @Description: Input:
 * nums1 = [1,2,3,0,0,0], m = 3
 * nums2 = [2,5,6],       n = 3
 * <p>
 * Output: [1,2,2,3,5,6]
 * 题目描述：把归并结果存到第一个数组上。
 * <p>
 * 需要从尾开始遍历，否则在 nums1 上归并得到的值会覆盖还未进行归并比较的值。
 */
public class MergeSortArray {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1;
        int j = n - 1;
        int indexMerge = m + n - 1;
        while ( j >= 0 || i >= 0){
            if (i < 0) {
                nums1[indexMerge--] = nums2[j--];
            } else if (j < 0) {
                nums1[indexMerge--] = nums1[i--];
            } else if (nums1[i] > nums2[j]) {
                nums1[indexMerge--] = nums1[i--];
            } else {
                nums1[indexMerge--] = nums2[j--];
            }
        }
    }
}
